package com.vip.jwt.common.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;

public class JsonUtil {

    /**
     * 转换为驼峰格式
     *
     * @param jsonObject 等待转换的方法
     * @param upper 首字母大写或者小写
     * @return 转换后的
     */
    public static JSONObject toCamelCase(JSONObject jsonObject, boolean upper) {
        JSONObject real = new JSONObject();
        for (String it : jsonObject.keySet()) {
            Object objR = jsonObject.get(it);
            // 转换为驼峰格式
            String key = StrUtil.toCamelCase(it);
            // 首字母大写或者小写
            key = upper ? StrUtil.upperFirst(key) : StrUtil.lowerFirst(key);
            if (objR instanceof JSONObject) {
                real.put(key, toCamelCase((JSONObject) objR, upper));
            }else if (objR instanceof JSONArray) {
                JSONArray jsonA = new JSONArray();
                for (Object objA : (JSONArray) objR) {
                    jsonA.add(toCamelCase((JSONObject) objA, upper));
                }
                real.put(key, jsonA);
            }else{
                real.put(key, objR);
            }
        }
        return real;
    }

    /**
     * 转换为下划线方式
     *
     * @param jsonObject 等待转换的方法
     * @return 转换后的
     */
    public static JSONObject toUnderline(JSONObject jsonObject) {
        JSONObject real = new JSONObject();
        for (String it : jsonObject.keySet()) {
            Object objR = jsonObject.get(it);
            // 转换为下划线方式
            String key = StrUtil.toUnderlineCase(it);
            if (objR instanceof JSONObject) {
                real.put(key, toUnderline((JSONObject) objR));
            }else if (objR instanceof JSONArray) {
                JSONArray jsonA = new JSONArray();
                for (Object objA : (JSONArray) objR) {
                    jsonA.add(toUnderline((JSONObject) objA));
                }
                real.put(key, jsonA);
            }else{
                real.put(key, objR);
            }
        }
        return real;
    }

}
